package com.hspedu.Object;

/**
 * == 是一个比较运算符
 * == ： 既可以判断基本类型，又可以判断引用类型
 * 1.判断基本类型时，判断的是值是否相等。
 * 2.判断引用类型时，判断的时地址是否相等，即判断是不是同一个对象
 *
 * equals 是 Object的方法，比较两个对象是否相同，
 * 若是Object的子类调用equals方法，则要看是否重写equals方法
 */
public class Equals01 {
    public static void main(String[] args) {
        int x = 10;
        double y = 10.0;
        System.out.println(x==y);//true，基本类型时，判断的是值是否相等。

        A a = new A();
        A b = a;
        A c = b;
        System.out.println(a == c);//判断a和c地址是否相等，即是否指向同一个对象，为true
        System.out.println(b == c);//true
        B bObj = a;//向上转型，把一个子类的对象赋给父类的引用
        System.out.println(bObj == c);//true

        System.out.println("===========equals==========");

        //各个类的equals方法
        /**Object
         * public boolean equals(Object obj) {
         *         return (this == obj);//比较对象是否相同
         *     }
         */
        Object o = new Object();
        Object o2 = new Object();
        System.out.println(o.equals(o2));


        /**String
         * public boolean equals(Object anObject) {
         *         if (this == anObject) {//判断是否为同一个对象
         *             return true;
         *         }
         *         if (anObject instanceof String) {//传进来的对象是否为String类型或者是String类型的子类
         *             String anotherString = (String)anObject;//向下转型
         *             int n = value.length;
         *             if (n == anotherString.value.length) {//如果长度相同
         *                 char v1[] = value;
         *                 char v2[] = anotherString.value;
         *                 int i = 0;
         *                 while (n-- != 0) {//一个一个比较字符
         *                     if (v1[i] != v2[i])
         *                         return false;
         *                     i++;
         *                 }
         *                 return true;//若两个字符串的所有字符都相等，则返回true
         *             }
         *         }
         *         return false;//如果当前传进来的对象都不是字符串，直接返回false
         *     }
         */
        String s1 = "asdf";
        String s2 = "asdf";
        System.out.println(s1.equals(s2));

        /**Integer 判断值是否相等
         * public boolean equals(Object obj) {
         *         if (obj instanceof Integer) {//如果传进来的对象是Integer类型或者Integer的子类
         *             return value == ((Integer)obj).intValue();//向下转型，将当前对象的值 和 传进来对象的值比较是否为true
         *         }
         *         return false;
         *     }
         */
        Integer integer = new Integer(1);
        Integer integer1 = new Integer(1);
        System.out.println(integer.equals(integer1));
    }
}

class A extends B{

}
class B{

}